#ifndef CLIENTBASE_H
#define CLIENTBASE_H

#include <stdio.h>
#include <unistd.h>
#include <sys/stat.h>

#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdlib.h>

#include <iostream>
#include <string.h>
#include <string>

#include "proto.h"
#include "Base.h"
#include "FenetreObservateur.h"
#include "netUtilClient.h"

using namespace std;

class ListeChaines;
class FenetreObservateur;

class ObservateurBase : public QObject, public Base
{
    Q_OBJECT

private:
    FenetreObservateur *ptrFenetre; // Le pointeur vers la fenetre.

public:
    ObservateurBase(FenetreObservateur *ptrFenetre);
    ~ObservateurBase();
    bool ouvrirSocket(const char *ip, const char *port); // Ouvre la socket sur une ip et un port. (LANCE UN THREAD)
    void fermerSocket(const QString &cause); // ferme la socket.
    void attendreMessage();
    void traitementMessage(int idMessage);

    bool getConnecte();
    const char *getPort();
    const char *getIp();
    string getNick();
    pthread_t getThreadLecture();

signals:
    void estConnecte();
    void estDeconnecte(QString); // Mise à jour de l'état de connexion de la socket (déconnectée).
    void sallesRecues(QStringList);
    void activitesRecues(QStringList);
    void etudiants_recus(QString);
    void message_act(QString);
    void connecteasalle();
};


#endif // CLIENTBASE_H
